
<!
DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		// 函数的提升：
			//js在预解析中：会将函数提升到作用域的上方，调用不会
		fn()
		var num = 10;
		function fn(){
			var num = 20;
			console.log(num)//20
		}
		//相当于=====函数的提升高于变量的提升,并且同名函数和变量，函数不会被变量的声明覆盖，但会被赋值覆盖
		// function fn(){
		// 	var num = 20;
		// 	console.log(num)//20
		// }
		// var num;
		// fn();
		// num = 10;

		//==============
		// a()
		// var a = 1;
		// function a(){
		// 	console.log("下午放假")
		// }
		// console.log(a)
		// a()

		//相当于
		// function a(){
		// 	console.log("下午放假")
		// }
		// var a;
		// a()
		// a = 1;
		// console.log(a)//1
		// a()//报错

		//===================
		// console.log(xy)
		// var xy;
		// function xy(){
		// 	console.log(z)
		// 	var z = "abc"
		// }
		// xy()
	 //相当于
		// function xy(){
		// 	var z
		// 	console.log(z)
		//     z = "abc"
		// }
		// var xy()
		// console.log(xy)
		// xy()

		//================
	// 	console.log(ab)//10
	// 	var ab = 10;
	// 	var z = 666;
	// 	function ab(){
	// 		console.log(z)//undefined
	// 		var z = "abc"
	// 		console.log(z)//abc
	// 	}
	// 	ab()
	// 	console.log(ab)
	 // //相当于
	// 	function ab(){
	// 		console.log(z)//undefined
	// 		var z = "abc"
	// 		console.log(z)//abc
	// 	}
	// 	var ab;
	// 	var z;
	// 	console.log(ab)//f
	// 	ab = 10;//赋值会替换同名的ab函数
	// 	z = 666;
	// 	ab()//报错
	// 	console.log(ab)//10

		//函数表达式: 通过将匿名函数赋值给变量，所以函数表达式 只能提示声明，不能提升函数，按照变量提升算
		let a = functiona(){

		}
		//===============
		var getName = function(){
			console.log(1)
		}
		function getName(){
			console.log(2)
		}
		getName()//1
		//相当于
		function getName(){
			console.log(2)
		}
		var getName;
		getName = function(){
			console.log(1)
		}
		getName()//1
	</script>
</body>
</html>